﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using Common;

namespace CNCSoft.ErpApps.TMS.longGiaoVu
{
    public partial class frmBaoLuuHocPhiChiTiet : Form
    {
        private SqlConnection conn = new SqlConnection(GlobalVariable.WSInfo.ConnectionString);
        private DataSet ds = new DataSet();
        //private frmBaoLuuHocPhi frmbaoluu = new frmBaoLuuHocPhi();
        private string _makhoahoc = "";
        private string _invoicenumber = "";
        private string _amount = "";
        private string _builling = "";
        private string _hoten = "";
        private string _sogiohoc = "";
        private string _mangaytrontuan = "";
        private IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);
        DateTime _ngaykhaigiang;
        DateTime _ngayketthuc;

        private double _sotien1hhoc = 0;
        private double _sotienbaoluu = 0;

        public frmBaoLuuHocPhiChiTiet()
        {
            InitializeComponent();
        }

        public frmBaoLuuHocPhiChiTiet(string mkh, string invnum, string hoten, string amount, string builling, string sogiohoc, string mangaytrongtuan)
        {
            InitializeComponent();
            _makhoahoc = mkh;
            _invoicenumber = invnum;
            _hoten = hoten;
            _amount = amount;
            _builling = builling;
            _sogiohoc = sogiohoc;
            _mangaytrontuan = mangaytrongtuan;
        }

        private void frmBaoLuuHocPhiChiTiet_Load(object sender, EventArgs e)
        {
            try
            {
                LoadControl();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void dateEditNgayBaoLuu_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                //DateTime ngaykhaigiang = DateTime.Parse(lblNgayKhaiGiang.Text, culture, System.Globalization.DateTimeStyles.AssumeLocal);
                //DateTime ngayketthuc = DateTime.Parse(lblNgayKetThuc.Text, culture, System.Globalization.DateTimeStyles.AssumeLocal);
                //int songaydahoc = SoNgayDaHoc(ngaykhaigiang, Convert.ToDateTime(dateEditNgayBaoLuu.EditValue));

                if (KetQua(_ngaykhaigiang, _ngayketthuc, Convert.ToDateTime(dateEditNgayBaoLuu.EditValue)))
                {
                    lblKetQua.Text = "Bạn có thể được bảo lưu do thời gian học của bạn chưa đạt được 2/3 trên tổng thời gian của khóa học.";
                    pnlCenter.Visible = true;
                    lblSoTienDaDong.Text = String.Format("{0:C}", Convert.ToDouble(_amount));
                    lblTenHocSinh.Text = _hoten;
                    lblPhiBaoLuu.Text = String.Format("{0:C}", 300000);
                    _sotien1hhoc = SoTien1hHoc(Convert.ToDouble(_builling), Convert.ToInt32(_sogiohoc));
                    lblSoTien1hHoc.Text = String.Format("{0:C}", _sotien1hhoc);
                    _sotienbaoluu = SoTienBaoLuu(Convert.ToDouble(_amount), _sotien1hhoc,
                                                    SoGioDaHoc(_ngaykhaigiang, Convert.ToDateTime(dateEditNgayBaoLuu.EditValue)));
                    lblSoTienBaoLuu.Text = String.Format("{0:C}", _sotienbaoluu);
                    lblNgayKetThucBaoLuu.Text = TinhNgayKetThucBaoLuu(Convert.ToDateTime(dateEditNgayBaoLuu.EditValue), (31 * 6)).ToString("dd/MM/yyyy", culture);
                    lblSoGioDaHoc.Text = SoGioDaHoc(_ngaykhaigiang, Convert.ToDateTime(dateEditNgayBaoLuu.EditValue)).ToString();
                }
                else
                {
                    lblKetQua.Text = "Bạn không thể được bảo lưu do thời gian học của bạn vượt quá 2/3 trên tổng thời gian của khóa học.";
                    pnlCenter.Visible = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        private void btnDongYBaoLuu_Click(object sender, EventArgs e)
        {
            try
            {
                
                DongYBaoLuu(_invoicenumber, _makhoahoc, dateEditNgayBaoLuu.EditValue.ToString(), lblNgayKetThucBaoLuu.Text, 
                                memoEditLyDoBaoLuu.Text, SoTienBaoLuu(Convert.ToDouble(_amount), 
                                _sotien1hhoc, SoGioDaHoc(_ngaykhaigiang, Convert.ToDateTime(dateEditNgayBaoLuu.EditValue))).ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #region "Coding"
        private void LoadControl()
        {
            try
            {
                //Info cua khoa hoc
                LoadKhoaHocByKhoaHoc(_makhoahoc);
                lblTenKhoaHoc.Text = ds.Tables["TableKhoaHocByKhoaHoc"].Rows[0][0].ToString();
                lblNgayKhaiGiang.Text = ds.Tables["TableKhoaHocByKhoaHoc"].Rows[0][1].ToString();
                lblNgayKetThuc.Text = ds.Tables["TableKhoaHocByKhoaHoc"].Rows[0][2].ToString();
                _ngaykhaigiang = DateTime.Parse(lblNgayKhaiGiang.Text, culture, System.Globalization.DateTimeStyles.AssumeLocal);
                _ngayketthuc = DateTime.Parse(lblNgayKetThuc.Text, culture, System.Globalization.DateTimeStyles.AssumeLocal);
                //-------------------------------------------------------------------------------------------------------------------------
                dateEditNgayBaoLuu.EditValue = DateTime.Now.ToShortDateString();
                //int songaydahoc = SoNgayDaHoc(ngaykhaigiang, Convert.ToDateTime(dateEditNgayBaoLuu.EditValue));

                if (KetQua(_ngaykhaigiang, _ngayketthuc, Convert.ToDateTime(dateEditNgayBaoLuu.EditValue)))
                {
                    lblKetQua.Text = "Bạn có thể được bảo lưu do thời gian học của bạn chưa đạt được 2/3 trên tổng thời gian của khóa học.";
                    pnlCenter.Visible = true;
                    lblSoTienDaDong.Text = String.Format("{0:C}", Convert.ToDouble(_amount));
                    lblTenHocSinh.Text = _hoten;
                    lblPhiBaoLuu.Text = String.Format("{0:C}", 300000);
                    _sotien1hhoc = SoTien1hHoc(Convert.ToDouble(_builling), Convert.ToInt32(_sogiohoc));
                    lblSoTien1hHoc.Text = String.Format("{0:C}", _sotien1hhoc);
                    _sotienbaoluu = SoTienBaoLuu(Convert.ToDouble(_amount), _sotien1hhoc, 
                                                    SoGioDaHoc(_ngaykhaigiang, Convert.ToDateTime(dateEditNgayBaoLuu.EditValue)));
                    lblSoTienBaoLuu.Text = String.Format("{0:C}", _sotienbaoluu);
                    lblSoGioDaHoc.Text = SoGioDaHoc(_ngaykhaigiang, Convert.ToDateTime(dateEditNgayBaoLuu.EditValue)).ToString();
                    lblNgayKetThucBaoLuu.Text = TinhNgayKetThucBaoLuu(Convert.ToDateTime(dateEditNgayBaoLuu.EditValue), (31 * 6)).ToString("dd/MM/yyyy", culture);
                }
                else
                {
                    lblKetQua.Text = "Bạn không thể được bảo lưu do thời gian học của bạn vượt quá 2/3 trên tổng thời gian của khóa học.";
                    pnlCenter.Visible = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void LoadKhoaHocByKhoaHoc(string makhoahoc)
        {
            try
            {
                if (ds.Tables["TableKhoaHocByKhoaHoc"] != null)
                    ds.Tables["TableKhoaHocByKhoaHoc"].Clear();
                string sql = @"SELECT TenKhoaHoc, CONVERT(VARCHAR, NgayBatDau, 103), CONVERT(VARCHAR, NgayKetThuc, 103), SoGioHoc FROM DM_KHOAHOC WHERE MaKhoaHoc = '" + makhoahoc + "'";
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                da.Fill(ds, "TableKhoaHocByKhoaHoc");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private int SoNgayDaHoc(DateTime start, DateTime end)
        {
            try
            {
                return end.DayOfYear - start.DayOfYear;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return 0;
            }
        }

        private bool KetQua(DateTime startdate, DateTime enddate, DateTime baoluudate)
        {
            try
            {
                int start = startdate.DayOfYear;
                int end = enddate.DayOfYear;
                int baoluu = baoluudate.DayOfYear;
                double kq = (double)(baoluu - start) / (end - start);
                if (kq > ((double)2 / 3))
                    return false;
                else
                    return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        private int SoGioDaHoc(DateTime startdate, DateTime baoluudate)
        {
            try
            {
                double i = 0;
                int songaydahoc = 0;
                DateTime datetemp = startdate;
                while (datetemp < baoluudate)
                {
                    datetemp = datetemp.AddDays(i);
                    if (_mangaytrontuan == "01")
                    {
                        if (datetemp.DayOfWeek.ToString() == "Monday" || datetemp.DayOfWeek.ToString() == "Wednesday" || datetemp.DayOfWeek.ToString() == "Friday")
                        {
                            songaydahoc += 1;
                        }
                    }
                    else if (_mangaytrontuan == "02")
                    {
                        if (datetemp.DayOfWeek.ToString() == "Tuesday" || datetemp.DayOfWeek.ToString() == "Thursday" || datetemp.DayOfWeek.ToString() == "Saturday")
                        {
                            songaydahoc += 1;
                        }
                    }
                    else if (_mangaytrontuan == "20")
                    {
                        if (datetemp.DayOfWeek.ToString() == "Saturday" || datetemp.DayOfWeek.ToString() == "Sunday")
                        {
                            songaydahoc += 1;
                        }
                    }
                    else if (_mangaytrontuan == "21")
                    {
                        if (datetemp.DayOfWeek.ToString() != "Saturday" && datetemp.DayOfWeek.ToString() != "Sunday")
                        {
                            songaydahoc += 1;
                        }
                    }
                    i++;
                }
                return songaydahoc * 2;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return 0;
            }
        }

        private double SoTien1hHoc(double builling, int sogiohoc)
        {
            try
            {
                return builling / sogiohoc;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return 0;
            }
        }

        private double SoTienBaoLuu(double sotiendadong, double sotien1hhoc, int sogiodahoc)
        {
            try
            {
                return sotiendadong - (sotien1hhoc * sogiodahoc) - 300000;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return 0;
            }
        }

        private DateTime TinhNgayKetThucBaoLuu(DateTime ngaybaoluu, int songaybaoluu)
        {
            try
            {
                return ngaybaoluu.AddDays(songaybaoluu);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return new DateTime(1, 1, 1900);
            }
        }

        private void DongYBaoLuu(string invoicenumber, string makhoahoc, string tungay, string denngay, string lydobaoluu, string sotienbaoluu)
        {
            try
            {
                tungay = dateEditNgayBaoLuu.EditValue.ToString();
                int i = 0;
                string sql = @"INSERT INTO BaoLuu(InvoiceNumber, MaKhoaHoc, TuNgay, DenNgay, LyDoBaoLuu, SoTienBaoLuu)
                                VALUES(@invoicenumber, @makhoahoc, @tungay, @denngay, @lydobaoluu, @sotienbaoluu)";
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@invoicenumber", invoicenumber);
                cmd.Parameters.AddWithValue("@makhoahoc", makhoahoc);
                cmd.Parameters.AddWithValue("@tungay", Convert.ToDateTime(tungay));
                cmd.Parameters.AddWithValue("@denngay", DateTime.Parse(denngay, culture, System.Globalization.DateTimeStyles.AssumeLocal));
                cmd.Parameters.AddWithValue("@lydobaoluu", lydobaoluu);
                cmd.Parameters.AddWithValue("@sotienbaoluu", Convert.ToDouble(sotienbaoluu));
                try
                {
                    conn.Open();
                    i = cmd.ExecuteNonQuery();
                }
                finally
                {
                    if (conn != null)
                        conn.Close();
                }
                if (i > 0)
                {
                    MessageBox.Show("Đăng ký bảo lưu thành công");
                    UpdateTinhTrangToBaoLuu(invoicenumber, makhoahoc);
                    //this.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void UpdateTinhTrangToBaoLuu(string invoicenumber, string makhoahoc)
        {
            try
            {
                int i = 0;
                string sql = @"UPDATE Invoice_KhoaHoc SET TinhTrang = N'baoluu' WHERE InvoiceNumber = @invoicenumber AND MaKhoaHoc = @makhoahoc";
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@invoicenumber", invoicenumber);
                cmd.Parameters.AddWithValue("@makhoahoc", makhoahoc);
                try
                {
                    conn.Open();
                    i = cmd.ExecuteNonQuery();
                }
                finally
                {
                    if (conn != null)
                        conn.Close();
                }
                if (i > 0)
                    MessageBox.Show("update tinh trang to bao luu thanh cong");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        #endregion
    }
}
